package com.gitee.swsk33.algorithms.stack.recursion;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * 一些常用的递归示例
 */
public class RecursionTest {

	/**
	 * 阶乘函数
	 *
	 * @param n 传入n
	 * @return n的阶乘
	 */
	public static int fact(int n) {
		if (n == 0) {
			// n = 0是阶乘函数的结束条件
			return 1;
		} else {
			// 否则，调用自己
			return n * fact(n - 1);
		}
	}

	/**
	 * 递归获取一个目录中所有文件包括子目录
	 *
	 * @param dir    获取文件夹
	 * @param result 用于存放结果的列表对象引用
	 */
	private static void getFileList(String dir, List<String> result) {
		// 获取文件列表
		File dirFile = new File(dir);
		File[] files = dirFile.listFiles();
		// 遍历每个文件
		for (File file : files) {
			// 如果这个文件是文件，则记录到结果列表
			if (file.isFile()) {
				result.add(file.getAbsolutePath());
			} else {
				// 否则，再调用自己扫描文件夹
				// 注意思考一下，这里调用自己的时候传的参是什么
				getFileList(file.getAbsolutePath(), result);
			}
		}
	}

	/**
	 * 获取一个文件夹及其子目录的所有文件-启动部分
	 *
	 * @param dir 待获取文件夹
	 * @return 文件列表
	 */
	public static List<String> getFileList(String dir) {
		List<String> result = new ArrayList<>();
		getFileList(dir, result);
		return result;
	}

	public static void main(String[] args) {
		
	}

}